using System;
using System.Collections.Generic;
using System.Text;

namespace EuropeEngulfed.NET
{
    interface IGameStateInfoProvider
    {
        List<Block> GetRegionsAlliedBlockList(MapInfo.RegionID regionID);
        List<Block> GetRegionsAxisBlockList(MapInfo.RegionID regionID);
        List<GroundSupportUnit> GetRegionsAlliedGSUList(MapInfo.RegionID regionID);
        List<GroundSupportUnit> GetRegionsAxisGSUList(MapInfo.RegionID regionID);
        MapInfo.CountryID GetRegionControl(MapInfo.RegionID regionID);
        bool RegionContainsABeachHead(MapInfo.RegionID regionID);
        MapInfo.CountryID GetRegionBeachHeadCountry(MapInfo.RegionID regionID);
        int beachHeadAvailable(MapInfo.CountryID country);
        List<FleetPoint> GetFleetPointList(MapInfo.CountryID country, MapInfo.RegionID regionID);
        int GetNumSpecialActions(MapInfo.CountryID country);
        uint GetGermanUBoatPoints();
        uint GetGermanFlakLevel();
        uint GetGermanFighterPoints();
        uint GetGermanBomberPoints();
        uint GetGermanV1Points();
        uint GetGermanV2Points();
        uint GetASWLevel();
        uint GetWesternAlliedFlakLevel();
        uint GetWesternAlliedFighterPoints();
        uint GetWesternAlliedBomberPoints();
        GameTurn.GameDate GetCurrentGameDate();
        GameTurn.GamePhase GetCurrentGamePhase();
        GameState.Weather GetCurrentWesternWeather();
        GameState.Weather GetCurrentEasternWeather();
        GameState.Weather GetCurrentSouthernWeather();
        bool IsAxisCountry(MapInfo.CountryID countryID);
        bool IsAlliedCountry(MapInfo.CountryID countryID);
        bool IsNationAtWar(MapInfo.CountryID countryID);
        bool IsNationConquered(MapInfo.CountryID countryID);
        bool HasVichyBeenDeclared();
        bool enemyUnitsHaveBeenInsideGermany();
        bool ItalyHasSurrendered();
        bool ItalianMoraleHasCollapsed();
        bool DoesRegionHaveFieldFortification(MapInfo.RegionID regionID);
        bool DoesRegionHaveHeavyFieldFortification(MapInfo.RegionID regionID);
        List<PlayingPiece> GetForcePoolList(MapInfo.CountryID countryID);
        bool CanAxisBlockReceiveReplacement(Block block, MapInfo.RegionID regionI);
        bool CanAlliedBlockReceiveReplacement(Block block, MapInfo.RegionID regionID);
        List<MapInfo.CountryID> GetCountriesThatHaveSpentSAUnlimitedReplacement(MapInfo.RegionID region);
        List<MapInfo.CountryID> GetCountriesThatHaveSpentSARetreatFromCombatWithoutRearGuard(MapInfo.RegionID region);
        bool IsNewBattle(MapInfo.RegionID region);
        bool IsBattleDone(MapInfo.RegionID regionID);
        LandRegionState.NewBattleStatus GetNewBattleStatus(MapInfo.RegionID regionID);
        GameState.Weather GetCurrentWeatherAtRegion(MapInfo.RegionID region);
        int GetNumStratMovesForCountry(MapInfo.CountryID country);
        bool HasGermanUnitUsedItalianSeaTransportThisTurn();
        bool HasGermanyAndUSSRBeenAtWarSinceStartOfTurn();
        bool HasVichyFranceBeenWarSinceBeginningOfTurn();
        bool NovgorodHasFallen();
        bool LeningradHasFallen();
        bool HaveAlliesSuccessfullyControlledFranceRegionOrPlacedBeachHeadAfter1942();
        MapInfo.CountryID GetAxisMinorStepMarker();
        int GetGermanStratWarfareEffectOnStratMoves();
        int GetWAlliesStratWarfareEffectOnStratMoves();
        int GetOperationOverlordEffect();
        GameTurn.GameDate GetNextFleetAllowed(MapInfo.CountryID country);
        GameTurn.GameDate GetNextFlakAllowed(MapInfo.CountryID country);
        GameTurn.GameDate GetNextASWAllowed();
        int GetNumFleetTransfersMadeThisTurn(MapInfo.CountryID country);
    }
}
